home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
utils
/
desktop
/
thin054e.lzh
/
DOC
/
VAPROTO.H
< prev
Wrap
C/C++ Source or Header
|
1994-11-27
|
18KB
|
450 lines
/*
* @(#) Gemini\vaproto.h
* @(#) Stefan Eissing, 12. November 1994
*
*
* Beschreibung: Definition der Nachrichten des Venus <-> Accessory
* Protokolls
*
* 07.12.: AV_PATH_UPDATE, AV_WHAT_IZIT, AV_DRAG_ON_WINDOW eingebaut.
* 21.10.94: AV_STARTED
* 31.10.94: AV_XWIND und VA_FONTCHANGED eingeführt.
* Siehe auch die neue Bitbelegung in PROTOSTATUS
* 12.11.94 Neues Bit im PROTOSTATUS des Accessories zum "Quoten"
* von Dateinamen
*/
#ifndef __vaproto__
#define __vaproto__
/* Message-Nummern für das xAcc-Protokoll von Konrad Hinsen
* Venus gibt bei ACC_ID "VENUS.APP" und Gemini gibt "GEMINI.APP"
* zurück. Gemini unterstützt xAcc der Stufe 0.
*/
#define ACC_ID 0x400
#define ACC_OPEN 0x401
#define ACC_CLOSE 0x402
#define ACC_ACC 0x403
/* Message-Nummern für die Kommunikation zwischen Venus und
* verschiedenen Accesories.
* Sollten in Nachrichten Pfade oder Dateinamen vorkommen, so
* muß immer der absolute Pfad angegeben werden (also mit Laufwerk)
* und die Laufwerksbuchstaben müssen Großbuchstaben sein. Pfade
* sollten immer mit einem Backslash enden!
* Neu seit dem 12.11.94 ist, daß optional Namen auch mit einfachen
* Anführungszeichen versehen werden können. Siehe AV_PROTOKOLL.
*
* Nachrichten von Venus beginnen mit VA (Venus -> Accessory).
* Nachrichten an Venus beginnen mit AV (Accessory -> Venus).
*
* Mit AV_PROTOKOLL kann jedes Acc nachfragen, welche Nachrichten
* verstanden werden (Dies ist ja bei VENUS und GEMINI
* unterschiedlich! Es wäre schön, wenn auch andere Programme auf
* dieses Protokoll reagieren würden. Zumindest AV_SENDKEY ist
* sicher leicht zu implementieren und ist die einzige Methode, wie
* über Nachrichten Tastaturdrücke simuliert werden können.
*
* Unter normalem TOS fragt dazu ein Accessory, wenn es eine
* AC_CLOSE-Nachricht vom AES erhalten hat, die Applikation 0
* mit AV_PROTOKOLL, ob sie etwas davon versteht.
* Unter MultiTOS muß aber das Programm nicht mehr die ID 0
* haben, zudem kommt es (fast) nicht mehr zu AC_CLOSE-Nachrichten.
* Es können auch nicht nur Accessories, sondern auch normale
* Programme mit Gemini kommunizieren wollen. Was tun?
* Wenn es mehr als eine Hauptapplikation geben kann, dann sollte
* das Programm/Accessory versuchen, mit GEMINI Kontakt aufzunehmen.
* Die ID kann ja mit appl_find ermittelt werden. Scheitert dies, so
* kann noch nach AVSERVER oder dem Inhalt der (AES-)Environmentvariable
* AVSERVER gesucht werden. Besonders die letzte Möglichkeit erlaubt
* eine leichte Konfiguration "von außen". Die neuen Versionen der
* Library VAFUNC von Stephan Gerle (in gutsortierten Mailboxen
* erhältlich) verfahren fast genauso.
*/
/* AV_PROTOKOLL: Mit dieser Nachrichtennummer sollte man bei
* anderen Applikationen und auch VENUS/GEMINI nachfragen, ob
* und welche Nachrichten sie versteht.
*/
#define AV_PROTOKOLL 0x4700
/*
* Word 6+7: Pointer auf den Accessorynamen, wie er bei
* appl_find benutzt werden muß; also 8 Zeichen lang
* nullterminiert (char name[9]).
* Die Bits in den Worten 3, 4 und 5 haben folgende Bedeutung:
* Word 3:
* Bit 0: (VA_SETSTATUS)
* Bit 1: (VA_START)
* Bit 2: (AV_STARTED)
* Bit 3: (VA_FONTCHANGED)
* Bit 4: (Versteht und benutzt Quoting von Dateinamen)
*
* Alle anderen Bits sind für Erweiterungen reserviert und sollten
* daher mit 0 vorbesetzt werden. Das gilt natürlich auch für die
* Bits in den Worten 4 und 5.
* (Mehr zum Quoting siehe unten)
*/
/* Macros zum Testen des Protkollstatus auf Quoting
*/
#define VA_ACC_QUOTING(a) ((a) & 0x10)
#define VA_SERVER_QUOTING(a) ((a) & 0x40)
/* VA_PROTOSTATUS: Dem Sender von AV_PROTOKOLL wird mitgeteilt, daß
* der Empfänger etwas von diesem Protokoll weiß. Die Worte 3-7 des
* Nachrichtenpuffers enthalten die Information, welche Nachrichten
* verstanden werden. Gesetzte Bits stehen dafür, daß eine Nachricht
* (Nachrichtengruppe) verstanden werden.
*/
#define VA_PROTOSTATUS 0x4701
/*
* Word 6+7: Pointer auf den Programmnamen, wie er bei
* appl_find benutzt werden muß; also 8 Zeichen lang
* nullterminiert (char name[9]).
* Die Bits in den Worten 3, 4 und 5 haben folgende Bedeutung:
* Word 3:
* Bit 0 (AV_SENDKEY)
* Bit 1 (AV_ASKFILEFONT)
* Bit 2 (AV_ASKCONFONT, AV_OPENCONSOLE)
* Bit 3 (AV_ASKOBJECT)
* Bit 4 (AV_OPENWIND)
* Bit 5 (AV_STARTPROG)
* Bit 6 (AV_ACCWINDOPEN, AV_ACCWINDCLOSED)
* Bit 7 (AV_STATUS, AV_GETSTATUS)
* Bit 8 (AV_COPY_DRAGGED)
* Bit 9 (AV_PATH_UPDATE, AV_WHAT_IZIT, AV_DRAG_ON_WINDOW)
* Bit 10 (AV_EXIT)
* Bit 11 (AV_XWIND)
* Bit 12 (VA_FONTCHANGED)
* Bit 13 (AV_STARTED)
* Bit 14 (Versteht und benutzt Quoting von Dateinamen)
*
* Alle anderen Bits sind für Erweiterungen reserviert und sollten
* daher mit 0 vorbesetzt werden. Das gilt natürlich auch für die
* Bits in den Worten 4 und 5.
*
* AV_SENDKEY kann sicher jeder leicht in seine Programme einbauen.
* Bei AV_OPENWIND könnte ein Hauptprogramm auch seine "normale"
* Routine zum Öffnen eines Dokumentes anwerfen und dabei den
* übergebenen Pfad benutzen. Dies ist zusammen mit der Benutzung
* von TreeView sicher eine einfache Art, Dateien aus anderen Ordnern
* oder Laufwerken zu laden.
*
* Zu Bit 14 (im Server, z.B. Gemini), bzw. Bit 4 im Client
* (Accessory):
* Mit "Quoting" ist im VA-Protkoll gemeint, daß Dateinamen optional
* mit einfachen Anführungszeichen 'name' versehen werden können.
* Dies ist aber nur erlaubt, wenn beide Parteien (Server und Client)
* sich darüber einig sind (lies: beide es verstehen können).
* Wie geht das also vor sich? Angenommen Gemini schickt an ein
* Accessory einen Dateinamen, der ein Leerzeichen enthält. Ein Acc,
* das Quoting nicht kann, wird statt einem zwei Dateinamen erkennen,
* da normalerweise Leerzeichen Dateinamen trennen.
* Versteht das Acc aber Quoting (Bit 4 in seinem Protokollstatus),
* so wird Gemini den Dateinamen mit '' umgeben und das Acc erkennt,
* daß das Leerzeichen zum Dateinamen gehört.
* Gleiches gilt natürlich auch für Dateinamen, die von einem Acc
* an einen Server geschickt werden. Die Frage bleibt, wie man denn
* nun einfache Anführungszeichen überträgt. Nun, solche Zeichen,
* die zum Dateinamen gehören, werden einfach verdoppelt. Aus
* Julian's Profibuch wird für die Übertragung 'Julian''s Profibuch'.
* Einfach nicht? Nun, die Idee stammt nicht von mir, sondern wird
* genauso auch in Atari's Drag&Drop Protokoll benutzt.
*/
/* AV_GETSTATUS: Ein Accessory erfragt bei Venus den aktuellen
* Status, den es Venus mit AV_STATUS mal gegeben hat.
*/
#define AV_GETSTATUS 0x4703
/* AV_STATUS: Ein Accessory kann Venus seinen Status mitteilen,
* der dann von Venus im INF-File gespeichert wird und mit
* AV_GETSTATUS wieder abgerufen werden kann.
* Zuvor MUSS es sich aber mit AV_PROTOKOLL anmelden!
* Word 3+4: Pointer auf einen String, der keine Steuerzeichen
* enthalten darf und nicht länger als 256 Zeichen
* sein darf. Dieser Pointer darf allerdings NULL sein.
*/
#define AV_STATUS 0x4704
/* VA_SETSTATUS: Venus teilt dem Accessory den abgespeicherten
* Status bei Nachfrage durch AV_GETSTATUS mit. Dieser kann dann
* von einem Accessory gesetzt werden.
* Word 3+4: Pointer auf einen String, der keine Steuerzeichen
* enthält.
* Dieser Pointer kann allerdings NULL sein, dann war
* kein Status gespeichert.
*/
#define VA_SETSTATUS 0x4705
/* AV_SENDKEY: Ein Acc sendet VENUS/GEMINI einen Tastaturevent, den
* es selber vielleicht nicht versteht.
* Word 3 = Tastaturstatus ev_mmokstate
* Word 4 = Scancode der gedrückten Taste ev_mkreturn
*/
#define AV_SENDKEY 0x4710
/* VA_START: Accessory wird aktiviert. Word 3 + 4 enthalten einen
* Pointer auf eine Kommandozeile, der auch NULL sein kann.
* In der Kommandozeile stehen Pfade oder Dateinamen.
*/
#define VA_START 0x4711
/* AV_ASKFILEFONT: Frage n